package com.canaan.business.service.storehouse;

import java.util.List;
import com.canaan.business.domain.storehouse.StockCheck;
import com.canaan.business.domain.storehouse.StockCheckDetail;
import com.canaan.business.domain.storehouse.StockCheckPlan;
import com.canaan.business.domain.vo.CheckMainVo;
import com.canaan.business.domain.vo.CheckReviewVo;
import com.canaan.business.domain.vo.StockCheckPdaVo;

/**
 * 库存盘点任务Service接口
 *
 * @author ruoyi
 * @date 2023-02-14
 */
public interface IStockCheckService {
    /**
     * 查询库存盘点任务
     *
     * @param id 库存盘点任务主键
     * @return 库存盘点任务
     */
    StockCheck selectStockCheckById(Long id);

    /**
     * 查询库存盘点任务列表
     *
     * @param stockCheck 库存盘点任务
     * @return 库存盘点任务集合
     */
    List<StockCheck> selectStockCheckList(StockCheck stockCheck);

    /**
     * 新增库存盘点任务
     *
     * @param stockCheck 库存盘点任务
     * @return 结果
     */
    int insertStockCheck(StockCheck stockCheck);

    /**
     * 批量新增库存盘点任务
     *
     * @param stockCheckList 库存盘点任务列表
     * @return 结果
     */
    int batchInsertStockCheck(List<StockCheck> stockCheckList);

    /**
     * 修改库存盘点任务
     *
     * @param stockCheck 库存盘点任务
     * @return 结果
     */
    int updateStockCheck(StockCheck stockCheck);

    /**
     * 批量修改库存盘点任务
     *
     * @param stockCheckList 库存盘点任务列表
     * @return 结果
     */
    int batchUpdateStockCheck(List<StockCheck> stockCheckList);

    /**
     * 批量删除库存盘点任务
     *
     * @param ids 需要删除的库存盘点任务主键集合
     * @return 结果
     */
    int deleteStockCheckByIds(Long[] ids);

    /**
     * 删除库存盘点任务信息
     *
     * @param id 库存盘点任务主键
     * @return 结果
     */
    int deleteStockCheckById(Long id);

    /**
     * 查询库存盘点任务
     *
     * @param no 编号
     * @return 库存盘点任务
     */
    StockCheck selectStockCheckByNo(String no);

    /**
     * 批量删除库存盘点任务
     *
     * @param nos 需要删除的编号集合
     * @return 结果
     */
    int deleteStockCheckByNos(String[] nos);

    /**
     * 删除库存盘点任务信息
     *
     * @param no 编号
     * @return 结果
     */
    int deleteStockCheckByNo(String no);

    StockCheck generatorByPlan(StockCheckPlan stockCheckPlan);

    void checkLock(StockCheck stockCheck,List<StockCheckDetail> stockCheckDetails);

    int createReCheck(Long[] ids);

    /**
     * 取消盘点
     * @param ids
     * @return
     */
    int  cancelCheck(Long[] ids);

    /**
     * 提交差异审核
     * @param id
     * @return
     */
    int submitReview(Long id);

    /**
     * 通过差异审核
     * @param vo
     * @return
     */
    int reviewPass(CheckReviewVo vo);

    /**
     * 拒绝差异审核
     * @param vo
     * @return
     */
    int reviewFail(CheckReviewVo vo);
    /**
     * 开始盘点
     * @param ids
     * @return
     */
    int startCheck(Long[] ids);

    int finish(Long[] ids);

    List<StockCheckPdaVo> listPda(StockCheckPdaVo stockCheck);

    int allocation(StockCheck stockCheck);

    CheckMainVo getDetail(Long id);

    int createReCheckDirect(Long[] ids);
}
